<?php  
	//******************分类管理模型******************
	class CategoryModel extends Model{
		//定义表名
		public $table = 'category';
		//保存所有分类缓存的属性
		public $allCate;

		//自动运行方法
		public function __init(){
			//读取缓存
			$this->allCate = S('allCate',false,0,array('dir'=>CACHE_PATH));
		}

		//更新缓存
		public function update_cache(){
			//获得数据
			$data = $this -> all();
			//写入缓存 1.缓存名称 2.缓存数据 3.缓存时间 4.缓存路径
			S('allCate',$data,0,array('dir'=>CACHE_PATH));
		}

		//添加分类
		public function add_data(){
			//add不传值时 默认为post的值
			$this -> add();
			//更新缓存
			$this -> update_cache();
		}

		//获得分类数据
		public function get_data($where=NULL,$field=NULL){
			return $this -> where($where) -> field($field) -> all();
		}

		//获得一条数据 where条件 指定字段
		public function get_one($where,$field=NULL){
			return $this -> where($where) -> field($field) -> find();
		}

		//修改分类
		public function edit($cid=0){
			$this -> where(array('cid'=>$cid)) -> save();
			//更新缓存
			$this -> update_cache();
		}

		//删除分类
		public function del_cate(){
			//获得要删除的cid
			$cid = Q('get.cid', 0, 'intval');
			//判断是否有子级
			$sonId = $this->where(array('pid'=>$cid))->getField('cid');
			//如果有子级返回假
			if($sonId) return false;
			//判断是否有文章
			$arc = K('Article') -> get_data($cid);
			//如果有文章 返回假 
			if ($arc) return false;
			//如果没有则删除
			$this->where(array('cid'=>$cid))->delete();
			//更新缓存
			$this -> update_cache();
			return true;
		}

		//查询可以选择的分类
		public function get_choose_cate($cid){
			//获得分类全部数据
			$cate = $this -> all();
			//获得自己和自己子集的分类id
			$sonCidArr = $this -> get_son_id($cate,$cid);
			//将cid压入数组中
			$sonCidArr[] = $cid;
			//不在自己和子级分类id的数组重新压入一个新数组，也就是可以选择的分类
			$tempArr = array();
			foreach ($cate as$v) {
				if (!in_array($v['cid'], $sonCidArr)) {
					$tempArr[] = $v;
				}
			}
			return $tempArr;
		}


		//获得自己和自己子级的分类id
		public function get_son_id($cate,$cid){
			//定义临时数组保存数据
			$tempArr = array();
			//循环数据
			foreach($cate as $v){
				//如果查询到子级
				if ($cid == $v['pid']) {
					//压入临时数组中
					$tempArr[] = $v['cid'];
					//合并数组 递归
					$tempArr = array_merge($tempArr,$this->get_son_id($cate,$v['cid']));
				}
			}
			//反出数组
			return $tempArr;
		}

		//修改状态，包括1.列表静态2.内容静态3.是否显示
		public function update_stat($cid=0){
			//获得主键cid
			$cid = Q('post.cid', 0, 'intval');
			//获得修改类型
			$type = Q('post.type');
			//获得开关
			$switch = Q('post.switch') == 'on' ? 1 : 0;
			//循环修改状态
			switch ($type) {
				case 'list':
					$data = array('is_listhtml'	=>	$switch);
					break;
				case 'arc':
					$data = array('is_archtml'	=>	$switch);
					break;
				case 'show':
					$data = array('is_show'	=>	$switch);
					break;
			}
			//修改数据
			$this->where(array('cid' =>	$cid))->save($data);
			//更新缓存
			$this -> update_cache();
		}

		/**
		 * [get_feld 获得字段数据的字段]
		 * @param  [type] $cid   [cid]
		 * @param  [type] $field [要取的字段]
		 * @return [type]        [description]
		 */
		public function get_field($cid,$field){
			return $this -> where(array('cid'=>$cid)) -> getField($field);
		}
	}
?>